import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:7002/api/v1',
  timeout: 240000, // 增加到240秒（4分钟），适应AI调用
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 添加token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    const { data } = response

    // 统一处理业务逻辑错误
    if (data.code !== undefined && data.code !== 200) {
      const errorMessage = data.message || '操作失败'
      ElMessage.error(errorMessage)
      return Promise.reject(new Error(errorMessage))
    }

    // 返回响应数据
    return data
  },
  error => {
    let errorMessage = '请求失败'

    if (error.response) {
      const { status, data } = error.response

      if (status === 401) {
        errorMessage = '登录已过期，请重新登录'
        ElMessage.error(errorMessage)
        localStorage.removeItem('token')
        localStorage.removeItem('userInfo')
        // 跳转到登录页
        if (window.location.pathname !== '/login') {
          window.location.href = '/login'
        }
        return Promise.reject(new Error(errorMessage))
      } else if (status === 403) {
        errorMessage = '权限不足'
      } else if (status === 404) {
        errorMessage = '请求的资源不存在'
      } else if (status === 500) {
        errorMessage = '服务器内部错误'
      } else if (data && data.message) {
        errorMessage = data.message
      }
    } else if (error.request) {
      errorMessage = '网络错误，请检查网络连接'
    } else {
      errorMessage = error.message || '未知错误'
    }

    ElMessage.error(errorMessage)
    return Promise.reject(new Error(errorMessage))
  }
)

// 用户相关API
export const userAPI = {
  // 用户注册
  register(data) {
    return api.post('/user/register', data)
  },

  // 用户登录
  login(data) {
    return api.post('/user/login', data)
  },

  // 获取用户信息
  getProfile() {
    return api.get('/user/profile')
  },

  // 更新用户信息
  updateProfile(data) {
    return api.put('/user/profile', data)
  },

  // 修改密码
  changePassword(data) {
    return api.post('/user/change-password', data)
  },

  // 上传头像
  uploadAvatar(file) {
    const formData = new FormData()
    formData.append('file', file)
    return api.post('/user/upload-avatar', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  // 获取用户偏好
  getPreferences() {
    return api.get('/user/preferences')
  },

  // 更新用户偏好
  updatePreferences(data) {
    return api.post('/user/preferences', data)
  },

  // 获取用户统计
  getStats() {
    return api.get('/user/stats')
  }
}

// 衣服相关API
export const clothingAPI = {
  // 获取衣服列表
  getList(params) {
    return api.get('/clothing', { params })
  },

  // 获取衣服详情
  getDetail(id) {
    return api.get(`/clothing/${id}`)
  },

  // 创建衣服
  create(data) {
    return api.post('/clothing', data)
  },

  // 更新衣服
  update(id, data) {
    return api.put(`/clothing/${id}`, data)
  },

  // 删除衣服
  delete(id) {
    return api.delete(`/clothing/${id}`)
  },

  // 上传衣服图片
  uploadImages(id, files) {
    const formData = new FormData()
    files.forEach(file => {
      formData.append('files', file)
    })
    return api.post(`/clothing/${id}/images`, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  // 设置主图片
  setMainImage(id, imageUrl) {
    return api.post(`/clothing/${id}/main-image`, { imageUrl })
  },

  // 收藏/取消收藏
  toggleFavorite(id) {
    return api.post(`/clothing/${id}/favorite`)
  },

  // 更新状态
  updateStatus(id, status) {
    return api.post(`/clothing/${id}/status`, { status })
  }
}

// 搭配相关API
export const outfitAPI = {
  // 获取搭配列表
  getList(params) {
    return api.get('/outfit', { params })
  },

  // 获取搭配详情
  getDetail(id) {
    return api.get(`/outfit/${id}`)
  },

  // 创建搭配
  create(data) {
    return api.post('/outfit', data)
  },

  // 更新搭配
  update(id, data) {
    return api.put(`/outfit/${id}`, data)
  },

  // 删除搭配
  delete(id) {
    return api.delete(`/outfit/${id}`)
  },

  // 添加衣服到搭配
  addClothing(id, data) {
    return api.post(`/outfit/${id}/clothing`, data)
  },

  // 从搭配中移除衣服
  removeClothing(outfitId, clothingId) {
    return api.delete(`/outfit/${outfitId}/clothing/${clothingId}`)
  },

  // 收藏/取消收藏
  toggleFavorite(id) {
    return api.post(`/outfit/${id}/favorite`)
  },

  // 评分
  rate(id, rating) {
    return api.post(`/outfit/${id}/rate`, { rating })
  },

  // 复制搭配
  copy(id) {
    return api.post(`/outfit/${id}/copy`)
  },

  // 今天穿这套
  wearToday(id) {
    return api.post(`/outfit/${id}/wear-today`)
  }
}

// 推荐相关API
export const recommendAPI = {
  // 获取衣服推荐
  getClothingRecommendations(params) {
    return api.get('/recommend/clothing', { params })
  },

  // 获取搭配推荐
  getOutfitRecommendations(params) {
    return api.get('/recommend/outfit', { params })
  },

  // AI智能搭配
  aiMatch(data) {
    return api.post('/recommend/ai-match', data)
  }
}

// 统计相关API
export const statsAPI = {
  // 获取概览统计
  getOverview() {
    return api.get('/stats/overview')
  },

  // 获取衣服统计
  getClothingStats() {
    return api.get('/stats/clothing')
  },

  // 获取搭配统计
  getOutfitStats() {
    return api.get('/stats/outfit')
  },

  // 获取穿搭统计
  getWearStats() {
    return api.get('/stats/wear')
  }
}

// 文件上传API
export const uploadAPI = {
  // 上传图片
  uploadImage(file) {
    const formData = new FormData()
    formData.append('file', file)
    return api.post('/upload/image', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  // 批量上传
  uploadMultiple(files) {
    const formData = new FormData()
    files.forEach(file => {
      formData.append('files', file)
    })
    return api.post('/upload/multiple', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  }
}

// 分类相关API
export const categoryAPI = {
  // 获取分类列表
  getList() {
    return api.get('/category')
  },

  // 获取分类详情
  getById(id) {
    return api.get(`/category/${id}`)
  },

  // 创建分类
  create(data) {
    return api.post('/category', data)
  },

  // 更新分类
  update(id, data) {
    return api.put(`/category/${id}`, data)
  },

  // 删除分类
  delete(id) {
    return api.delete(`/category/${id}`)
  }
}

// 标签相关API
export const tagAPI = {
  // 获取标签列表
  getList(params) {
    return api.get('/tag', { params })
  },

  // 获取标签详情
  getById(id) {
    return api.get(`/tag/${id}`)
  },

  // 获取所有启用的标签
  getActive() {
    return api.get('/tag/active')
  },

  // 根据类型获取标签
  getByType(type) {
    return api.get(`/tag/type/${type}`)
  },

  // 创建标签
  create(data) {
    return api.post('/tag', data)
  },

  // 更新标签
  update(id, data) {
    return api.put(`/tag/${id}`, data)
  },

  // 删除标签
  delete(id) {
    return api.delete(`/tag/${id}`)
  }
}

// 智能推荐API
export const recommendationAPI = {
  // 获取天气信息
  getWeatherInfo(params = {}) {
    // 支持城市名、坐标等多种参数
    // params: { city, lat, lng }
    return api.get('/recommendation/weather-info', { params })
  },

  // 获取智能推荐
  getSmartRecommendations(params = {}) {
    // 支持位置信息、场合等参数
    // params: { city, lat, lng, occasion, includeWeather, useAI }
    return api.get('/recommendation/smart', { params })
  },

  // AI风格分析
  getAIStyleAnalysis() {
    return api.get('/recommendation/ai-style-analysis')
  },

  // 检查AI服务状态
  checkAIStatus() {
    return api.get('/recommendation/ai-status')
  },

  // 获取今日推荐
  getTodayRecommendations(params = {}) {
    // 支持位置信息参数
    // params: { city, lat, lng }
    return api.get('/recommendation/today', { params })
  },

  // 基于天气的推荐
  getWeatherBased(params) {
    return api.get('/recommendation/weather-based', { params })
  },

  // 基于场合的推荐
  getOccasionBased(params) {
    return api.get('/recommendation/occasion-based', { params })
  },

  // 基于颜色的推荐
  getColorBased(params) {
    return api.get('/recommendation/color-based', { params })
  },

  // 基于个人偏好的推荐
  getPersonalBased() {
    return api.get('/recommendation/personal-based')
  },

  // 基于相似用户的推荐
  getSimilarUserBased() {
    return api.get('/recommendation/similar-user-based')
  },

  // 智能搭配建议
  getSmartOutfit(data) {
    return api.post('/recommendation/smart-outfit', data)
  },

  // 今日推荐
  getDailyRecommendation() {
    return api.get('/recommendation/daily')
  },

  // 记录反馈
  recordFeedback(data) {
    return api.post('/recommendation/feedback', data)
  }
}

// 分析统计API
export const analysisAPI = {
  // 衣服使用频率分析
  getClothingUsage(params) {
    return api.get('/analysis/clothing-usage', { params })
  },

  // 颜色偏好分析
  getColorPreference() {
    return api.get('/analysis/color-preference')
  },

  // 搭配风格分析
  getOutfitStyle() {
    return api.get('/analysis/outfit-style')
  },

  // 购买建议分析
  getBuyingSuggestion() {
    return api.get('/analysis/buying-suggestion')
  },

  // 季节性穿搭分析
  getSeasonalWear(params) {
    return api.get('/analysis/seasonal-wear', { params })
  },

  // 衣柜利用率分析
  getWardrobeUtilization() {
    return api.get('/analysis/wardrobe-utilization')
  },

  // 支出分析
  getSpending(params) {
    return api.get('/analysis/spending', { params })
  },

  // 搭配评分趋势分析
  getOutfitRatingTrend(params) {
    return api.get('/analysis/outfit-rating-trend', { params })
  },

  // 综合分析报告
  getComprehensiveReport() {
    return api.get('/analysis/comprehensive-report')
  }
}

// 提醒API
export const reminderAPI = {
  // 获取提醒列表
  getList(params) {
    return api.get('/reminder', { params })
  },

  // 创建提醒
  create(data) {
    return api.post('/reminder', data)
  },

  // 更新提醒
  update(id, data) {
    return api.put(`/reminder/${id}`, data)
  },

  // 删除提醒
  delete(id) {
    return api.delete(`/reminder/${id}`)
  },

  // 标记为已完成
  markAsCompleted(id) {
    return api.post(`/reminder/${id}/complete`)
  },

  // 获取今日提醒
  getTodayReminders() {
    return api.get('/reminder/today')
  },

  // 创建洗涤提醒
  createLaundryReminder(data) {
    return api.post('/reminder/laundry', data)
  },

  // 创建换季提醒
  createSeasonalReminder(data) {
    return api.post('/reminder/seasonal', data)
  },

  // 创建购物提醒
  createShoppingReminder(data) {
    return api.post('/reminder/shopping', data)
  },

  // 获取购物清单
  getShoppingList() {
    return api.get('/reminder/shopping-list')
  },

  // 更新购物清单
  updateShoppingList(data) {
    return api.put('/reminder/shopping-list', data)
  }
}

// 社交API
export const socialAPI = {
  // 分享搭配
  shareOutfit(data) {
    return api.post('/social/share-outfit', data)
  },

  // 获取公开搭配
  getPublicOutfits(params) {
    return api.get('/social/public-outfits', { params })
  },

  // 点赞搭配
  likeOutfit(outfitId) {
    return api.post(`/social/outfit/${outfitId}/like`)
  },

  // 评论搭配
  commentOutfit(outfitId, data) {
    return api.post(`/social/outfit/${outfitId}/comment`, data)
  },

  // 获取搭配评论
  getOutfitComments(outfitId, params) {
    return api.get(`/social/outfit/${outfitId}/comments`, { params })
  },

  // 关注用户
  followUser(userId) {
    return api.post(`/social/user/${userId}/follow`)
  },

  // 获取关注列表
  getFollowing(params) {
    return api.get('/social/following', { params })
  },

  // 获取粉丝列表
  getFollowers(params) {
    return api.get('/social/followers', { params })
  },

  // 获取好友推荐
  getFriendRecommendations() {
    return api.get('/social/friend-recommendations')
  },

  // 获取动态流
  getFeed(params) {
    return api.get('/social/feed', { params })
  },

  // 举报内容
  reportContent(data) {
    return api.post('/social/report', data)
  }
}

// 穿搭记录相关API
export const wearRecordAPI = {
  // 获取穿搭记录列表
  getList(params) {
    return api.get('/wear-record', { params })
  },

  // 创建穿搭记录
  create(data) {
    return api.post('/wear-record', data)
  },

  // 删除穿搭记录
  delete(id) {
    return api.delete(`/wear-record/${id}`)
  }
}

// 地理位置API
export const locationAPI = {
  // 获取当前位置
  getCurrentLocation(params = {}) {
    // params: { lat, lng, address }
    return api.get('/location/current', { params })
  },

  // 地理编码（地址转坐标）
  geocode(address) {
    return api.post('/location/geocode', { address })
  },

  // 逆地理编码（坐标转地址）
  reverseGeocode(lat, lng) {
    return api.post('/location/reverse', { lat, lng })
  },

  // 获取城市列表
  getCities() {
    return api.get('/location/cities')
  },

  // IP定位
  getLocationByIP(ip) {
    return api.get('/location/ip', { params: { ip } })
  },

  // 搜索地点
  searchLocation(keyword, city) {
    return api.get('/location/search', { params: { keyword, city } })
  }
}

export default api
